<?php
/**
 * User: YL
 * Date: 2019/09/12
 */

namespace restful\utils;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Arr;

class Helper
{
    /**
     * 获取url地址
     * @param $url
     * @param $value
     * @return string
     */
    protected static function getUrl($url, $value)
    {
        if (empty($value)) {
            return '';
        } elseif (preg_match('/^(http|https)/', $value)) {
            return $value;
        }

        return $url . $value;
    }

    /**
     * 通过数组获取key
     * @param array $arr
     * @param string $flag
     * @return string
     */
    public static function getKeyByArray(array $arr, string $flag = '')
    {
        return md5(json_encode(Arr::sortRecursive($arr)) . $flag);
    }

    /**
     * 转换成布尔值
     * @param $value
     * @return bool
     */
    public static function boolean($value)
    {
        if (is_bool($value)) {
            return $value;
        } elseif ($value === 'true') {
            return true;
        } elseif ($value === 'false') {
            return false;
        }

        return !! $value;
    }

    /**
     * 通过字符串获取ids
     * @param string $ids
     * @param string $delimiter
     * @return array
     */
    public static function getIdsByStr(string $ids, string $delimiter = ',')
    {
        return static::getIdsByArr(explode($delimiter, $ids));
    }

    /**
     * 通过数组获取ids
     * @param array $ids
     * @return array
     */
    public static function getIdsByArr(array $ids)
    {
        return array_values(array_unique(array_filter($ids)));
    }

    /**
     * 获取允许保存的数据
     * @param Model $model
     * @param array $data
     * @param array $except
     * @return array
     */
    public static function allowSaveData(Model $model, array $data, array $except = [])
    {
        return Arr::except(
            Arr::only($data, $model->getFillable()),
            $except
        );
    }
}
